package com.example.hello.controller;

import com.example.hello.common.PageBean;
import com.example.hello.common.Result;
import com.example.hello.entity.Dept;
import com.example.hello.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 部门Controller层
 */
@RestController
@RequestMapping("/depts")
public class DeptController {
    
    @Autowired
    private DeptService deptService;
    
    /**
     * 查询所有部门
     * 请求路径：/depts
     * 请求方式：GET
     */
    @GetMapping
    public Result<List<Dept>> selectAll() {
        try {
            List<Dept> depts = deptService.selectAll();
            return Result.success(depts);
        } catch (Exception e) {
            return Result.error("查询失败：" + e.getMessage());
        }
    }
    
    /**
     * 部门信息分页查询
     * 请求路径：/depts
     * 请求方式：GET
     * 请求参数：name(可选), page(必须), pageSize(必须)
     */
    @GetMapping(params = {"page", "pageSize"})
    public Result<PageBean<Dept>> selectByPage(
            @RequestParam(required = false) String name,
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer pageSize) {
        try {
            PageBean<Dept> pageBean = deptService.selectByPage(name, page, pageSize);
            return Result.success(pageBean);
        } catch (Exception e) {
            return Result.error("分页查询失败：" + e.getMessage());
        }
    }
    
    /**
     * 根据ID查询部门
     * 请求路径：/depts/{id}
     * 请求方式：GET
     */
    @GetMapping("/{id}")
    public Result<Dept> selectById(@PathVariable Integer id) {
        try {
            Dept dept = deptService.selectById(id);
            if (dept == null) {
                return Result.error("部门不存在");
            }
            return Result.success(dept);
        } catch (Exception e) {
            return Result.error("查询失败：" + e.getMessage());
        }
    }
    
    /**
     * 添加部门
     * 请求路径：/depts
     * 请求方式：POST
     */
    @PostMapping
    public Result<Object> insert(@RequestBody Dept dept) {
        try {
            // 参数校验
            if (dept.getName() == null || dept.getName().trim().isEmpty()) {
                return Result.error("部门名称不能为空");
            }
            if (dept.getName().length() < 2 || dept.getName().length() > 10) {
                return Result.error("部门名称长度必须在2-10位之间");
            }
            
            int result = deptService.insert(dept);
            if (result > 0) {
                return Result.success();
            } else {
                return Result.error("添加失败");
            }
        } catch (Exception e) {
            return Result.error("添加失败：" + e.getMessage());
        }
    }
    
    /**
     * 修改部门
     * 请求路径：/depts
     * 请求方式：PUT
     */
    @PutMapping
    public Result<Object> update(@RequestBody Dept dept) {
        try {
            // 参数校验
            if (dept.getId() == null) {
                return Result.error("部门ID不能为空");
            }
            if (dept.getName() == null || dept.getName().trim().isEmpty()) {
                return Result.error("部门名称不能为空");
            }
            if (dept.getName().length() < 2 || dept.getName().length() > 10) {
                return Result.error("部门名称长度必须在2-10位之间");
            }
            
            // 检查部门是否存在
            Dept existingDept = deptService.selectById(dept.getId());
            if (existingDept == null) {
                return Result.error("部门不存在");
            }
            
            int result = deptService.update(dept);
            if (result > 0) {
                return Result.success();
            } else {
                return Result.error("修改失败");
            }
        } catch (Exception e) {
            return Result.error("修改失败：" + e.getMessage());
        }
    }
    
    /**
     * 删除部门
     * 请求路径：/depts/{id}
     * 请求方式：DELETE
     */
    @DeleteMapping("/{id}")
    public Result<Object> deleteById(@PathVariable Integer id) {
        try {
            // 检查部门是否存在
            Dept existingDept = deptService.selectById(id);
            if (existingDept == null) {
                return Result.error("部门不存在");
            }
            
            int result = deptService.deleteById(id);
            if (result > 0) {
                return Result.success();
            } else {
                return Result.error("删除失败");
            }
        } catch (Exception e) {
            return Result.error("删除失败：" + e.getMessage());
        }
    }
}
